Notizen
Gliederung
Enterprise JavaBeans Architektur
Folien zum IFC-Vortrag am 20.12.2000
Java 2 Enterprise Edition – Überblick 1/2
JDBC (Java Database Connectivity)
RMI (Remote Method Invocation)
JNDI (Java Naming and Directory Interface)
Java IDL / CORBA (Interface Description Language / Common Object Request Broker Architecture)
J2EE-Überblick 2/2
JMS (Java Message Service)
JTA (Java Transaction API)
Java Servlets / JSP (Java ServerPages)
EJB (Enterprise JavaBeans)
Was sind Enterprise JavaBeans
Verteiltes Komponenten Modell
JavaBeans als RMI-Remote Objekte
Können die Vorteile des Frameworks nutzen
Transaktionen
Persistenz
Sicherheit
Resourcen-Pools
Andere Java-API‘s
Brauchen eine Laufzeitumgebung (EJB-Container)
EJB-Container
Dient als Laufzeitumgebung für EJB
Sun liefert nur eine Referenzimplementation
BEA Weblogic Server, EnHydra Open Source Projekt
Hersteller ist verpflichtet alle Zusagen für EJB‘s einzuhalten
-> Kompatibilitätslogo
Hersteller darf sog. Value-added-features einbauen
-> Kompatibilitätsprobleme
Einige Details sind nicht standardisiert: z.B. Laden des Datenbanktreibers
-> Herstellerspezifisch
Beantypen
Persistenz
Business Methoden
Finder Methoden
PrimaryKey
Container Managed Persistence (CMP)
Bean Managed Persistence (BMP)
Überdauern nur eine Benutzersitzung
Applikations Logik
Statefull Session Beans
Stateless Session Beans
Session Beans
Haben über Methodenaufrufe hinweg einen Zustand
Sind für eine Sitzung spezifisch
Z.B. Abwicklung eines Workflows
Z.B. Shopping Cart
Speichern keinen Zustand
Vergleichbar mit statischen Methoden einer Klasse
Eine Bean kann von verschiedenen Benutzern gleichzeitig genutzt werden
Z.B. Druckdienste anbieten
Home Interface
Factory zum erzeugen von Instanzen
Namenskonvention:
DeinBeanNameHome.java
Extends EJBHome
public EJBMetaData getEJBMetaData() throws java.rmi.RemoteException;
public void remove(...) throws java.rmi.RemoteException, RemoveException;
Methoden zum Erzeugen von Beans
public void create(...) throws java.rmi.RemoteException, evtl. andere Exceptions
Remote Interface
Interface für die Remote ausführbaren Methoden
Namenskonvention:
DeinBeanName.java
Extends EJBObject
public EJBHome getEJBHome() throws java.rmi.RemoteException;
public Handle getHandle() throws java.rmi.RemoteException;
public Object getPrimaryKey() throws java.rmi.RemoteException;
public boolean isIdentical(EJBObject obj) throws java.rmi.RemoteException;
public void remove() throws java.rmi.RemoteException, RemoveException;
Enthält weiter die Business und Bean Methoden
Bean Implementation
Implementation der aus den Interfaces vorgegebenen Methoden
Implementiert die Home/Remote Interfaces nicht direkt, sondern ist nur lose verpflichtet die vereinbarten Methoden zu implementieren
Namenskonvention:
DeinBeanNameBean.java
Implementiert das SessionBean Interface
public void ejbActivate() throws java.rmi.RemoteException;
public void ejbPassivate() throws java.rmi.RemoteException;
public void ejbRemove() throws java.rmi.RemoteException;
public void setSessionContext(SessionContext ctxt) throws java.rmi.RemoteException;
Enthält zu jeder create(...) eine korrespondierende ejbCreate(...) Methode
CMP-Entity Bean
Der EJB-Container übernimmt das Datenbankmapping
Auf einfache Datenrelationen beschränkt
Man braucht kein SQL selbst schreiben, sondern gibt nur die Datenfeld/Tabellenspalte Relation an
Man hat evtl. Probleme bei der Skalierung der Applikation
Für die Finder Methoden wird ein herstellerabhängiges kurzes Skript geschrieben
Home Interface
Gleiche Konventionen wie bei Session Beans
Es gibt sog. Finder Methoden:
Mindestens vorhanden:
public DeinBeanName findByPrimaryKey(PKType pk) throws java.rmi.RemoteException, FinderException;
Liefern entweder DeinBeanName
oder Enumeration/Iterator
Konvention:
public ... findByIrgendwas(...) throws java.rmi.RemoteException, FinderException;
Bean Implementation
Implements EntityBean
public void ejbLoad() throws java.rmi.RemoteException;
public void ejbStore() throws java.rmi.RemoteException;
public void ejbActivate() throws java.rmi.RemoteException;
public void ejbPassivate() throws java.rmi.RemoteException;
public void ejbRemove() throws java.rmi.RemoteException;
public void setSessionContext(SessionContext ctxt) throws java.rmi.RemoteException;
public void unsetSessionContext() throws java.rmi.RemoteException;
Die Methoden aus dem EntityBean Interface werden nur leer implementiert
Man braucht nur die Business Methoden implementieren
BMP-Entity Bean
Man muß nun selbst das Finden, Laden, Speichern, Erzeugen und Zerstören der Beans kodieren
Man kann auch komplexe Datenzusammenhänge modellieren
Die entsprechenden SQL Befehle sind alle selbst zu schreiben
Bei der Skalierung auftretende Probleme kann man nun durch „schlaueren“ Code umgehen
Bean Implementation
Es wird wieder das EntityBean Interface implementiert
Die vorgegebenen Methoden werden nicht leer, sondern mit Inhalt implementiert
Zu den ejbCreate(...) Methoden gibt es korrespondierende ejbPostCreate(...) Methoden
Implementationstrick
Um Implementationsfehler zu umgehen kann man das Remote Interface implementieren.
Damit man die EJBObject Methoden nicht implementieren muss gibt es folgenden Trick:
Literatur
Java Enterprise in a Nutshell – David Flanagan
Core Servlets and Java ServerPages – Marty Hall
Designing Enterprise Applications with J2EE – Nicholas Kassem
Enterprise JavaBeans – Richard Monson-Haefel